這篇筆記主要整理自:官方文件 Writing Markup with JSX
JSX 是一種 JS 的 syntax extension(語法擴充),讓我們可以在 JS 檔案中寫下「很像 HTML」的 markup,比 HTML 更嚴謹一點,而且可以呈現動態的資訊(:超讚xd)
其實有很多撰寫元件的寫法,之所以選擇 JSX 除了長得真的很像 HTML 容易上手,還有現階段大部分的開發者都使用它,溝通上比較容易
一、未使用 React
二、使用 React
現代網頁互動性提高,邏輯影響內容的成分也跟著提高,當我們讓網頁內容與邏輯寫在同一個元件,可以讓元件中的內容與邏輯保持同步,且元件間彼此較不容易互相干擾,更易於維護
本身是 self-closing 的元素要記得加一個 slash /
<img>
➡️ <img />
本身就包含 closing 標籤的元素就記得一定要寫完整!
<li>oranges
➡️ <li>oranges</li>
原因:
JSX 會被轉譯成 JS,而 attribute 會變成 Object 裡的 key。JS 本身對變數的命名就有「不能用 dash、保留字」的規則。(上述的 attribute 事實上在 JSX 中,「prop」 才是比較正確的稱呼)
舉例:
border-radius
➡️ borderRadius
class
➡️ className
for
➡️ htmlFor
特例:
aria-*
和data-*
attributes 就寫得和 HTML 時的寫法一樣就好意思是如果有太多同層級的元素要回傳,請用<div></div>
或<></>
Fragment element 或其他標籤包住
原因:
JSX 雖然長得很像 HTML,但實際上它會先被轉譯成 JS Object,所以按照這樣的思考,我們不可能在一個函式同時回傳沒有被包在一起的兩個物件,所以我們把超過兩個以上的同層級元素,透過其他標籤包成首層只有一個元素回傳,就像是指回傳一個物件,是可行的!
建議:
真的遇到需要包裝的狀況,推薦使用 Fragment element <></>
,因為它不會在「Browser 的 HTML tree」留下痕跡
以下為官方文件的 Recap,不做翻譯,只畫重點
以上,有任何想法或文內有誤、不清楚歡迎提出,謝謝大家 🙏🏻
.
筆者小記:我愛 JSX!